import { HttpException, Injectable } from '@nestjs/common';
import { CreateTypeDto } from './dto/create-type.dto';
import { UpdateTypeDto } from './dto/update-type.dto';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { TypeDocument } from './shema/type.shema';
import { DeleteTypeDto } from './dto/delete-type.dto';

@Injectable()
export class TypeService {
  constructor(@InjectModel('Type') private readonly typeModel: Model<TypeDocument>) { }
  // 生成类型
  async create(createTypeDto: CreateTypeDto): Promise<TypeDocument> {
    return this.typeModel.create(createTypeDto);
  }
  // 查找所有类型
  async findAll(): Promise<TypeDocument[]> {
    return this.typeModel.find().exec();
  }
  // 根据id查找类型
  async findOne(id: string): Promise<TypeDocument> {
    return this.typeModel.findById(id).exec();
  }
  // 查找类型根节点下
  async findRootType(): Promise<TypeDocument[]> {
    return this.typeModel.find({ isRoot: true }).exec();
  }
  // 更新类型
  async update(updateTypeDto: UpdateTypeDto):Promise<boolean>{
    return (await this.typeModel.updateOne({_id:updateTypeDto.id},{type:updateTypeDto.type}).exec()).acknowledged;
  }
  // 删除某个id的类型
  async deleteOne(id:string):Promise<boolean>{
    return (await this.typeModel.deleteOne({_id:id}).exec()).acknowledged;
  }
  // 获取同一个父节点下的所有子节点
  async findByParentId(parentId: string): Promise<TypeDocument[]> {
    return this.typeModel.find({parentId:parentId?parentId:''}).exec();
  }
}
